#!/usr/bin/env python3

from tables._表 import 表 as _表
import re


class 表(_表):
	def __init__(自):
		翹舌聲母列表 = ['ch', 'ʻch', 'x', 'j']
		自.跳過字符列表 = '□々'
		自.聲調到調號 = {
			'\u0304': '1',
			'\u0302': '2',
			'\u0300': '3',
			'\u0301': '5',
			'\u0306': '7',
		}
		自.聲母到音標 = {
			'p': 'p', 't': 't', 'k': 'k',
			'ʻp': 'pʰ', 'ʻt': 'tʰ', 'ʻk': 'kʰ',
			'm': 'm', 'n': 'n', 'g': 'ŋ',
			'ç': 'ts', 'ch': 'tʂ',
			'ʻç': 'tsʰ', 'ʻch': 'tʂʰ',
			'f': 'f', 's': 's', 'x': 'ʂ', 'h': 'x',
			'v': 'ʋ', 'l': 'l', 'j': 'ɻ',
			'': '',
		}
		自.韻母轉音標規則列表 = [  # 格式：(拼寫正則表達式, 音標, 聲母條件)
			# 拼寫歸並
			('ea', 'ia'),
			('oa', 'ua'),
			('oe', 'ue'),
			('ao', 'au'),
			('^u(?=i|n)', 'ue', [
				'p', 'ʻp', 'm', 'f', 'v', 'k', 'ʻk', 'h', '',
			]),

			# 翹舌聲母後韻基同細音
			('un', 'ụn', 翹舌聲母列表),
			('i?e', 'ie', 翹舌聲母列表),

			# 轉音標
			('m$', 'ŋ'),
			('i?ụ|iu(?!ŋ)', 'y'), ('u̇', 'ɯ'), ('ul', 'ɯ˞'),
			('i?ė', 'ɪ'), ('y(?=ʔ)', 'ʏ'), ('u?ȯ', 'ʊ'),
			('e(?=u|ŋ)', 'ə'), ('ue', 'uə', ['f', 'v']),
			('(?<=i|y)e|e(?=ʔ)', 'ɛ'),
			('e', 'ə'), ('o', 'ɔ'),

			# 翹舌聲母後韻母變洪音
			('i(?=ə|ɛ|a)', '', 翹舌聲母列表),
			('^i', 'ɨ', 翹舌聲母列表), ('y', 'ʉ', 翹舌聲母列表),
			('ɪ', 'ə', 翹舌聲母列表), ('ʏ', 'ɵ', 翹舌聲母列表),
		]
		自.校註格式 = {
			1: '轄字同 _，音標按 _ 轉寫',
			2: '拼寫疑誤，當作 _',
		}
		自.拼寫校正字典 = {
			# 格式：(原聲母, 原韻母, 是否入聲): (新聲母, 新韻母, 校註序號)
			('', 'ui', 0): ('v', 'i', 1),
			('s', 'ụ', 1): ('s', 'iụ', 1),
			('s', 'u̇', 1): ('s', 'u', 2),
			('x', 'uȯ', 1): ('x', 'ȯ', 2),
			('g', 'uo', 1): ('g', 'ȯ', 2),
			('k', 'uȯ', 1): ('k', 'ue', 1),
			('g', 'oei', 0): ('', 'uei', 1),
			('v', 'ai', 0): ('', 'uai', 1),
			('v', 'en', 0): ('v', 'uen', 2),
			('x', 'oan', 0): ('x', 'uen', 2),
		}

	def 析(自, 列):
		聲母 = 列[1]
		韻母 = 列[2]
		字列表 = 列[5]
		半圈字列表 = 列[6]

		# 調整拼寫格式
		聲母 = 聲母.replace('c̹', 'ç')
		聲母 = 聲母.replace('Ø', '')
		if ('\u0351' in 聲母):
			聲母 = 'ʻ' + 聲母.replace('\u0351', '')
		韻母 = 韻母.replace('ụ', 'ụ')
		韻母 = 韻母.replace('ė', 'ė')
		韻母 = 韻母.replace('ȯ', 'ȯ')

		# 修正錄入錯誤
		if 列[4] in ['禅', '顏']:  # 反切下字
			韻母 = 韻母.replace('é', 'ê')
		if 半圈字列表 == '算篹撰':
			聲母 = 's'

		# 提取聲調
		無調韻母 = 韻母
		for 聲調, 調號 in 自.聲調到調號.items():
			if 聲調 in 韻母:
				無調韻母 = 無調韻母.replace(聲調, '')
				break

		# 校正拼寫
		註 = 聲母 + 韻母
		k = (聲母, 無調韻母, 1 if 調號 == '7' else 0)
		if k in 自.拼寫校正字典:
			註 += ' 校註：' + 聲母 + 無調韻母 + ' '
			聲母, 無調韻母, 校註序號 = 自.拼寫校正字典[k]
			註 += 自.校註格式[校註序號].replace('_', 聲母 + 無調韻母)

		# 拼寫轉音標
		聲母音標 = 自.聲母到音標[聲母]
		韻母音標 = 無調韻母
		if 調號 == '7':
			韻母音標 += 'ʔ'
		for 規則 in 自.韻母轉音標規則列表:
			if len(規則) == 3 and 聲母 not in 規則[2]:
				continue
			韻母音標 = re.sub(規則[0], 規則[1], 韻母音標)
		音 = 聲母音標 + 韻母音標 + 調號

		結果 = []
		for 字 in 字列表:
			if 字 in 自.跳過字符列表:
				continue
			結果.append((字, 音, 註))
		for 字 in 半圈字列表:
			if 字 in 自.跳過字符列表:
				continue
			結果.append((字, f'`{音}`', 註))
		return 結果
